package com.hainatong.shiphelper;

import android.app.Application;
import com.base.common.app.BaseApp;
import com.base.common.app.LoginUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.SPUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.Utils;
import com.hainatong.shiphelper.login.view.LoginActivity;
import com.hainatong.mvvmbase.loadsir.core.LoadSir;
import com.hainatong.mvvmbase.loadsir.layoutcallback.*;
import com.hainatong.mvvmbase.utils.L;
import com.jeremyliao.liveeventbus.LiveEventBus;

import android.graphics.Color;
import androidx.appcompat.app.AppCompatDelegate;
import cn.bertsir.zbar.QrConfig;
import cn.bertsir.zbar.view.ScanLineView;
import com.tencent.smtt.sdk.QbSdk;
import com.xuexiang.xaop.XAOP;
import com.xuexiang.xutil.XUtil;
import com.xuexiang.xutil.common.StringUtils;

public class App extends BaseApp
{

    private GlobalConfig globalConfig;

    @Override
    public void onCreate()
    {
        super.onCreate();
        setIsDebug( BuildConfig.isTest );
        //setIsDebug( true );
        Utils.init(this);
        setDESIGN_SIZE(Constants.DESIGN_SIZE);
        setScreenAuto(true);
        setNightTheme();

        initAOP(this);
        XUtil.init(this);
        // X5 环境
        QbSdk.initX5Environment(this,null);
        //PreLoadX5Service.start(application);

        //多状态页面 显示
        // 设置 默认的 LoadSir 如 页面 需要其他显示 其他状态 可以 自定义一个 LoadSir 添加不同的 Callback
        L.e("App","初始化 LoadSir");
        LoadSir.beginBuilder()
               .addCallback(new EmptyCallback())
               .addCallback(new ErrorCallback())
               .addCallback(new LoadingCallback())
               .addCallback(new TimeoutCallback())
               .addCallback(new AnimateCallback())
                //在设置setLoadser 时 会先显示 DefaultCallback 页面
               //.setDefaultCallback(AnimateCallback.class)
               .commit();
        /*
        LoadSir loadSir = new LoadSir.Builder()
                .addCallback(new XCallback())
                .addCallback(new LoadingCallback())
                .addCallback(new ErrorCallback())
                .setDefaultCallback(LoadingCallback.class)
                .build();
        */


        LogUtils.getConfig().setLogSwitch(true);
        LogUtils.getConfig().setGlobalTag("JCBug");

        globalConfig = GlobalConfig.getInstance();
        globalConfig.setmContext(this);


        // 401 登录过期
        LiveEventBus.get(LoginActivity.Token_Unauthorized)
                    .observeForever( msg -> {
                    //清空 token  重新登录
                        LoginUtils.loginOut();
                        LoginActivity.newLoginStart( this );
                    } );

        LiveEventBus.get("451")
                .observeForever( msg -> {
                    //没有操作权限
                    ToastUtils.showShort( (String) msg );
                } );

    }


    /**
     * 初始化XAOP切片框架
     *
     * @param application
     */
    private static void initAOP(Application application)
    {
        //初始化插件
        XAOP.init(application);
        //日志打印切片开启
        XAOP.debug(BuildConfig.DEBUG );
        //设置动态申请权限切片 申请权限被拒绝的事件响应监听
        XAOP.setOnPermissionDeniedListener(permissionsDenied -> LogUtils.e("权限申请被拒绝:" + StringUtils.listToString(permissionsDenied, ",")));
    }


    public static QrConfig getScanQrConfig()
    {
        // 全部 要扫描  （二维码 条形码）

        //扫码 类型   （二维码 条形码）
        int  scan_type = QrConfig.TYPE_QRCODE;
        int  scan_view_type = QrConfig.SCANVIEW_TYPE_QRCODE;
        //isScanQrCode
        if( true  )
        {
            // 由于改了 lazada 订单 id  这里 需要设置 只扫码  二维码
            scan_type = QrConfig.TYPE_ALL;
            //scan_type = QrConfig.TYPE_QRCODE;
            scan_view_type = QrConfig.SCANVIEW_TYPE_QRCODE;
        }
        else
        {
            scan_type = QrConfig.TYPE_BARCODE;
            scan_view_type = QrConfig.SCANVIEW_TYPE_BARCODE;
        }
        //scan_type = QrConfig.TYPE_ALL;
        //scan_view_type = QrConfig.SCANVIEW_TYPE_QRCODE;

        //scan_type = QrConfig.TYPE_QRCODE;
        //scan_view_type = QrConfig.SCANVIEW_TYPE_QRCODE;

        //scan_type = QrConfig.TYPE_BARCODE;
        //scan_view_type = QrConfig.SCANVIEW_TYPE_BARCODE;

        //屏幕自动
        //screen = QrConfig.SCREEN_SENSOR;
        //屏幕纵向
        //screen = QrConfig.SCREEN_PORTRAIT;
        //屏幕横向
        //screen = QrConfig.SCREEN_LANDSCAPE;

        //扫描线  雷达 样式
        //line_style = ScanLineView.style_radar;
        //扫描线  网格 样式
        //line_style = ScanLineView.style_gridding;
        //扫描线  雷达+网格 样式
        //line_style = ScanLineView.style_hybrid;
        // 线
        //line_style = ScanLineView.style_line;

        QrConfig qrConfig = new QrConfig.Builder()
                .setDesText( getInstance().getResources().getString(R.string.scan_shelf) )//扫描框下文字
                .setShowDes(true)//是否显示扫描框下面文字
                .setShowLight(false)//显示手电筒按钮
                .setShowTitle(true)//显示Title
                .setShowAlbum(false)//显示从相册选择按钮
                .setNeedCrop(false)//是否从相册选择后裁剪图片
                .setCornerColor(Color.parseColor("#EE3121"))//设置扫描框颜色
                .setLineColor(Color.parseColor("#EE3121"))//设置扫描线颜色
                .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度
                .setScanType(scan_type)// scan_type 设置扫码类型（二维码，条形码，全部，自定义，默认为二维码）
                .setScanViewType(scan_view_type)//scan_view_type 设置扫描框类型（二维码还是条形码，默认为二维码）
                .setCustombarcodeformat(QrConfig.BARCODE_PDF417)//此项只有在扫码类型为TYPE_CUSTOM时才有效
                .setPlaySound(true)//是否扫描成功后bi~的声音
                .setDingPath( R.raw.qrcode)//设置提示音(不设置为默认的Ding~)
                .setIsOnlyCenter(true)//是否只识别框中内容(默认为全屏识别)
                .setTitleText("入库")//设置Tilte文字
                .setTitleBackgroudColor(Color.parseColor("#1A000000"))//设置状态栏颜色
                .setTitleTextColor(Color.WHITE)//设置Title文字颜色
                .setShowZoom(false)//是否开始滑块的缩放
                .setAutoZoom(false)//是否开启自动缩放(实验性功能，不建议使用)
                .setFingerZoom(false)//是否开始双指缩放
                .setDoubleEngine(false)//是否开启双引擎识别(仅对识别二维码有效，并且开启后只识别框内功能将失效)
                .setScreenOrientation(QrConfig.SCREEN_PORTRAIT)//设置屏幕方式
                .setOpenAlbumText("选择要识别的图片")//打开相册的文字
                .setLooperScan(false)//是否连续扫描二维码
                .setLooperWaitTime(5 * 1000)//连续扫描间隔时间
                .setScanLineStyle( ScanLineView.style_gridding )// line_style 扫描线样式
                .setAutoLight(true)//自动灯光
                .setShowVibrator(true)//是否震动提醒
                .create();

        return qrConfig;
    }



    public static QrConfig getScanQrConfigByType( int viewType )
    {
        // 入库    货架
        //入库  条码  出库  条码   归还 条码
        String titleStr = "";
        String contentStr = "";
        if( viewType == 1 )
        {
            titleStr = getInstance().getResources().getString(R.string.fun_ruku);
            contentStr = getInstance().getResources().getString(R.string.scan_shelf);
        }
        else if( viewType == 2 )
        {
            titleStr = getInstance().getResources().getString(R.string.fun_ruku);
            contentStr = getInstance().getResources().getString(R.string.scan_qrcode);
        }
        else if( viewType == 3 )
        {
            titleStr = getInstance().getResources().getString(R.string.fun_chuku);
            contentStr = getInstance().getResources().getString(R.string.scan_qrcode);
        }
        else if( viewType == 4 )
        {
            titleStr = getInstance().getResources().getString(R.string.fun_return);
            contentStr = getInstance().getResources().getString(R.string.scan_qrcode);
        }

        QrConfig qrConfig = new QrConfig.Builder()
                .setDesText( contentStr )//扫描框下文字
                .setShowDes(true)//是否显示扫描框下面文字
                .setShowLight(false)//显示手电筒按钮
                .setShowTitle(true)//显示Title
                .setShowAlbum(false)//显示从相册选择按钮
                .setNeedCrop(false)//是否从相册选择后裁剪图片
                .setCornerColor(Color.parseColor("#EE3121"))//设置扫描框颜色
                .setLineColor(Color.parseColor("#EE3121"))//设置扫描线颜色
                .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度
                .setScanType(QrConfig.TYPE_ALL)// scan_type 设置扫码类型（二维码，条形码，全部，自定义，默认为二维码）
                .setScanViewType(QrConfig.SCANVIEW_TYPE_QRCODE)//scan_view_type 设置扫描框类型（二维码还是条形码，默认为二维码）
                .setCustombarcodeformat(QrConfig.BARCODE_PDF417)//此项只有在扫码类型为TYPE_CUSTOM时才有效
                .setPlaySound(true)//是否扫描成功后bi~的声音
                .setDingPath( R.raw.qrcode)//设置提示音(不设置为默认的Ding~)
                .setIsOnlyCenter(true)//是否只识别框中内容(默认为全屏识别)
                .setTitleText(titleStr)//设置Tilte文字
                .setTitleBackgroudColor(Color.parseColor("#1A000000"))//设置状态栏颜色
                .setTitleTextColor(Color.WHITE)//设置Title文字颜色
                .setShowZoom(false)//是否开始滑块的缩放
                .setAutoZoom(false)//是否开启自动缩放(实验性功能，不建议使用)
                .setFingerZoom(false)//是否开始双指缩放
                .setDoubleEngine(false)//是否开启双引擎识别(仅对识别二维码有效，并且开启后只识别框内功能将失效)
                .setScreenOrientation(QrConfig.SCREEN_PORTRAIT)//设置屏幕方式
                .setOpenAlbumText("选择要识别的图片")//打开相册的文字
                .setLooperScan(false)//是否连续扫描二维码
                .setLooperWaitTime(5 * 1000)//连续扫描间隔时间
                .setScanLineStyle( ScanLineView.style_gridding )// line_style 扫描线样式
                .setAutoLight(true)//自动灯光
                .setShowVibrator(true)//是否震动提醒
                .create();

        return qrConfig;
    }

    private void setNightTheme()
    {
        //设置 模式跟随系统
        //AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);

        boolean isNight = SPUtils.getInstance().getBoolean("SWITCH_MODE_KEY", false);
        if (isNight)
        {
            // 夜间模式
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            //SPUtils.getInstance().put("SWITCH_MODE_KEY", false);
        }
        else
        {
            // 日间模式
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            //SPUtils.getInstance().put("SWITCH_MODE_KEY", true);
        }
    }


//    @Override
//    public void onConfigurationChanged(Configuration newConfig)
//    {
//        super.onConfigurationChanged(newConfig);
//
//        int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
//        switch (currentNightMode)
//        {
//            case Configuration.UI_MODE_NIGHT_NO:
//                //关闭夜间模式
//                LogUtils.e("=======", "=====关闭夜间模式====");
//                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
//                AppManager.getInstance().finishAllActivity();
//                MainHomeActivity.reStart(this);
//                break;
//            case Configuration.UI_MODE_NIGHT_YES:
//                //打开夜间模式
//                LogUtils.e("=======", "=====开启夜间模式====");
//                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
//                AppManager.getInstance().finishAllActivity();
//                MainHomeActivity.reStart(this);
//                break;
//            default:
//                break;
//        }
//    }


}
